# Book：表示一本书，包含属性 title、author、isbn 和 available。
# Member：表示图书馆会员，包含属性 name 和 member_id，以及方法 borrow_book 和 return_book。
# Library：表示图书馆，包含属性 books（一个包含所有书籍的列表）和 members（一个包含所有会员的列表），以及方法 add_book、add_member、remove_book 和 remove_member。
# Librarian：表示图书管理员，继承自 Member，并包含额外的方法 add_book_to_library 和 remove_book_from_library。

# 要求
# Book 类应该有一个方法 is_available，用于检查书籍是否可借。
# Member 类的 borrow_book 方法应该检查书籍是否可借，如果可借则将书籍标记为不可借，并将书籍添加到会员的借书列表中。
# Member 类的 return_book 方法应该将书籍标记为可借，并从会员的借书列表中移除。
# Library 类应该有一个方法 get_available_books，用于获取所有可借的书籍。
# Librarian 类应该能够添加和移除书籍，并且只有图书管理员才能执行这些操作。
class Book:     # 书
    def __init__(self, title, author, isbn, available):
        self.title = title  # 书名
        self.author = author    # 作者
        self.isbn = isbn    # 书籍编号
        self.available = available      # 借出状态

        self.book = {"title": title, "author": author, "isbn": isbn, "available": available}

    def is_available(self, isbn):  # 检查书是否可借
        if self.book["isbn"] == isbn:
            return self.book["available"]


class Library:  # 图书馆
    def __init__(self):
        self.books = []     # 书单
        self.members = []   # 会员名单

    def get_available_books(self):  # 查询可借出的书
        print("可以借出的书:")
        for item in self.books:
            if item["available"] == "可借":
                print(item)

    def get_member(self):   # 获取会员名单
        print("会员名单:")
        for item in self.members:
            print(item)

    def add_book(self, book):   # 添加书籍
        self.books.append(book.book)
        print(f"添加书:{book.book}")

    def add_member(self, member):   # 添加会员
        self.members.append(member.member)
        print(f"添加会员:{member.member}")

    def remove_book(self, isbn):    # 删除书籍
        for item in self.books:
            if item["isbn"] == isbn:
                self.books.remove(item)
                print(f"删除书:{item}")

    def remove_member(self, member_id):     # 删除会员
        for item in self.members:
            if item["member_id"] == member_id:
                self.members.remove(item)
                print(f"删除会员:{item}")


class Member:   # 会员
    def __init__(self, name, member_id):
        super().__init__()
        self.name = name    # 会员名字
        self.member_id = member_id  # 会员id
        self.member_borrow_book = []    # 会员借书名单

        self.member = {"name": name, "member_id": member_id}

    def borrow_book(self, Library, isbn):   # 借书
        for item in Library.books:
            if item["isbn"] == isbn:
                if item["available"] == "可借":
                    item["available"] = "不可借"
                    self.member_borrow_book.append({"borrow_member": self.member, "borrow_book": item})
                    print(f"书{item}借出")
                else:
                    return "书已经借出，不能再借"

    def return_book(self, Library, isbn):   # 还书
        for item in self.member_borrow_book:
            if item["borrow_book"]["isbn"] == isbn:
                self.member_borrow_book.remove(item)
        for item in Library.books:
            if item["isbn"] == isbn:
                item["available"] = "可借"
                print(f"书{item}归还")

    def borrow_member_book(self):   # 借书名单
        print("借书名单:")
        for item in self.member_borrow_book:
            print(f"借书的人:{item['borrow_member']},借的书{item['borrow_book']}")


class Librarian(Member):    # 图书管理员
    def add_book_to_library(self, library, book):   # 添加书籍
        library.add_book(book)

    def remove_book_to_library(self, library, isbn):    # 删除书籍
        library.remove_book(isbn)


if __name__ == "__main__":
    book1 = Book("星空与半棵树", "陈彦", 1, "可借")
    book2 = Book("落日珊瑚", "孙频", 2, "可借")
    book3 = Book("麦田望不到边", "汤成难", 3, "可借")

    member1 = Member("刘玉栋", 1)
    member2 = Member("艾玛", 2)
    member3 = Member("徐则臣", 3)

    library = Library()
    librarian = Librarian("张三李四", 0)

    # 图书管理员添加书籍
    librarian.add_book_to_library(library, book1)
    librarian.add_book_to_library(library, book2)
    librarian.add_book_to_library(library, book3)

    # 图书馆获取可借书籍
    library.get_available_books()
    print()

    # 图书馆添加会员
    library.add_member(member1)
    library.add_member(member2)
    library.add_member(member3)

    # 图书馆获取会员名单
    library.get_member()
    print()

    # 图书管理员删除书本，并获取图书馆可借书名单
    librarian.remove_book_to_library(library, 3)
    library.get_available_books()
    print()

    # 图书馆删除会员，并获取会员名单
    library.remove_member(3)
    library.get_member()
    print()

    # 会员借书，并获取图书馆可借书名单
    member1.borrow_book(library, 1)
    library.get_available_books()
    print()

    # 获取会员借书名单
    member1.borrow_member_book()
    print()

    # 会员还书，并获取图书馆可借书名单
    member1.return_book(library, 1)
    library.get_available_books()
    print()